package com.free.messager;

import com.free.exception.SystemException;
import com.free.exception.SystemRuntimeException;

import java.util.Locale;
import java.util.function.Function;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
public class MessageUtils {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/
    public static String getMessage(String key,Object... params)
    {
        return getMessageProc(msger-> msger.getMessage(key, params));
    }

    public static String getMessageWithLocale(String key, Locale local, Object... params)
    {
        return getMessageProc(msger-> msger.getMessage(key, local, params));
    }

    public static String getMessage(Enum<?> key,Object... params)
    {
        return getMessageProc(msger-> msger.getMessage(key, params));
    }

    public static String getMessageWithLocale(Enum<?> key, Locale local, Object... params)
    {
        return getMessageProc(msger-> msger.getMessage(key, local, params));
    }

    private static String getMessageProc(Function<IMessager,String> func)  {
        IMessager msger = MessagerManager.current().getMessager();
        if(msger == null){
            throw new SystemRuntimeException("没有信息管理模块");
        }
        return func.apply(msger);
    }
    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
